import numpy as np

# 处理湿度的空值，假如是空值的话设置为none
def inMixData2float(org_array, new_array):
    for index in range(0, len(org_array)):
        item = org_array[index]
        if item != b'':
            item = item.decode('gb2312')
            item = float(item)
        else:
            item = None
        new_array[index] = item

# 处理极端值，当原始数据里某个值超出了最大范围，把这个数据设置成none
def defectsCop(data_array, threshold):
    for index in range(0, len(data_array)):
        item = data_array[index]
        if item >= float(threshold):
            item = None
        data_array[index] = item

# 插值函数，如果值是nan，取其前后两个值的平均
def bisec(dataArray):
    for index in range(0, len(dataArray)):
        if np.isnan(dataArray[index]):
            if (index-1)>=0 and (index+1)<len(dataArray):
                dataArray[index] = (dataArray[index-1] + dataArray[index + 1])*0.5

# 读取原始数据: 湿度、瓦斯浓度、一氧化碳浓度
(humidity_str,
 gas_str,
 co_str) = np.loadtxt(
    'ug_detect.csv',
    dtype=bytes,
    delimiter=',',
    skiprows=1,
    usecols=(2,3,4),
    unpack=True
)
humidity = np.ndarray(len(humidity_str))
inMixData2float(humidity_str, humidity)
defectsCop(humidity, 200)

# print("井下的湿度是：\n", humidity)

# 下节课作业：
# 瓦斯气体浓度（超过100的设置为nan）和一氧化碳浓度超过100的设置为nan）按照湿度的方式处理并打印最后的结果
gas = np.ndarray(len(gas_str))
inMixData2float(gas_str, gas)
defectsCop(gas, 100)

# print("井下的瓦斯浓度是：\n", gas)


co = np.ndarray(len(co_str))
inMixData2float(co_str, co)
defectsCop(co, 100)

# print("井下的一氧化碳浓度是：\n", co)

bisec(humidity)
bisec(gas)
bisec(co)
print("井下的湿度是：\n", humidity)
print("井下的瓦斯气体浓度是：\n", gas)
print("井下的一氧化碳浓度是：\n", co)

print("保存处理后的湿度数据文件。。。")
np.savetxt('ug_humidity.csv',
           humidity,
           delimiter=',',
           fmt='%.2f')

print("保存处理后的瓦斯浓度数据文件。。。")
np.savetxt('ug_gas.csv',
           gas,
           delimiter=',',
           fmt='%.2f')

print("保存处理后的一氧化碳数据文件。。。")
np.savetxt('ug_co.csv',
           co,
           delimiter=',',
           fmt='%.2f')


print("将这三种井下环境指标的数据写入一个文件中。。。")
all_data = np.array([humidity, gas, co]).transpose() # 转成ndarray对象
np.savetxt(
    "all_data_numpy.csv",
    all_data,
    header="湿度,瓦斯浓度,一氧化碳浓度",
    delimiter=",",
    comments="",
    fmt="%.2f"
)











